import json


def get_dict(datas):
    '''
    接受dataset.txt文件的信息，返回字典(word2id)和列表(id2word),并打印字频
    Args:
        datas: dataset.txt

    Returns: 返回字典(word2id)和列表(id2word)

    '''
    word_count = {}  # 字典，用于在第二层循环中统计字频，作为字键对应的值
    for data in datas:
        data = data.strip().replace('\t', '')
        for word in data:
            # 如果当前字典没有这个键，则添加这个键，默认值0.如果有这个键，不发挥作用
            word_count.setdefault(word, 0)
            word_count[word] += 1  # 统计字频

    word2id = {"<pad>": 0, "<unk>": 1, "<sep>": 2}

    temp = {word: i + len(word2id) for i, word in enumerate(word_count.keys())}
    word2id.update(temp)
    id2word = list(word2id.keys())
    return word2id, id2word


if __name__ == '__main__':
    with open('dataset.txt', 'r', encoding='utf-8') as f:
        datas = f.readlines()
    word2id, id2word = get_dict(datas)

    dict_datas = {"word2id": word2id, "id2word": id2word}
    '''
    当你在保存 JSON 数据时，中文字符被转义成了 Unicode 形式（例如 \u4e00），
    这是 Python 默认的行为。这是为了确保 JSON 文件在所有系统和编程语言中都能兼容，并避免编码问题。

    如果你希望保存的 JSON 文件中中文字符不被转义，且显示为原始的中文字符，
    可以在 json.dump 中使用 ensure_ascii=False 参数。这个参数默认是 True，
    当设置为 False 时，Python 会将中文字符保留为原始字符，而不是转义为 Unicode。
    '''
    json.dump(dict_datas, open('dict_datas.json', 'w', encoding='utf8'), ensure_ascii=False)
